package com.example.service;

import com.example.prop.EventDispatcher;
import com.example.event.ProductChangedEvent;
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * 事件处理
 * @author yu
 */
@Slf4j
@Component
public class EventService {

    @Autowired
    private EventDispatcher eventDispatcher;

    /**
     * 前置注册
     */
    @PostConstruct
    public void startup() {
        eventDispatcher.register(this);
        eventDispatcher.registerAsync(this);
    }

    /**
     * 后置销毁  销毁连接
     */
    @PreDestroy
    public void destroy() {
        eventDispatcher.unregister(this);
        eventDispatcher.unregisterAsync(this);
    }

    @Subscribe
    @AllowConcurrentEvents // 表示可以多线程调用事件订阅服务器 标识线程安全
    public void listen1(
            ProductChangedEvent event) {
        int i= 2/0;
        System.out.println(event.getSkuId() + "接受事件通知"+"ThreadName:"+Thread.currentThread().getName());
        event.setSkuId(22L);
    }
//
//    @Subscribe
//    @AllowConcurrentEvents // 表示可以多线程调用事件订阅服务器 标识线程安全
//    public void listen2(
//            ProductChangedEvent event) {
//        System.out.println(event.getSkuId() + "接受事件通知"+"ThreadName:"+Thread.currentThread().getName());
//        event.setSkuId(33L);
//    }
//
//
//    @Subscribe
//    @AllowConcurrentEvents // 表示可以多线程调用事件订阅服务器 标识线程安全
//    public void listen3(
//            ProductChangedEvent event) {
//        System.out.println(event.getSkuId() + "接受事件通知"+"ThreadName:"+Thread.currentThread().getName());
//        event.setSkuId(44L);
//    }


}
